home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 9 / Night Owl CD-ROM (NOPV9) (Night Owl Publisher) (1993).ISO / 005a / pbank21b.zip / BANK.PPE (.txt) < prev    next >
PCBoard Programming Language Executable  |  1993-06-16  |  9KB  |  353 lines

  1. ;------------------------------------------------------------------------------
  2. ;                                                   .ss.
  3. ;                                                   `²²'
  4. ;             .,sS$Ss,,s$  .,sS$$$Ss.  .,sS$Ss,,s$ .ss.  .sSs.
  5. ;           .d$$²^°²$$$$'.d$P²°^^²$P'.d$$²^°²$$$$'.$$$' .$$$²Sb,.
  6. ;           $$$'   .$$$' $$$²Sçsµ²' .$$$'   .$$$'.$$$' .$$$'  `$$b.
  7. ;           $$$b,,d$$$' ,$$$b,....,s$$$$b,,d$$$'.$$$;.,$$$'    ;$$$
  8. ;           `²S$$S²²S$$S²°²S$$$$S²°°²S$$$$$$',$$S²°²S$S'.sS$$$P²'
  9. ;                                    .sS²°$$$²²°"'       d²°'
  10. ;                                  .$$²  .$$'
  11. ;                                  $$$.,d$$'
  12. ;                                  `²S$$S²'
  13. ;------------------------------------------------------------------------------
  14. ; P.P.L.X. 2.OO                          (C)1996 - Lone Runner / AEGiS CoRP'96 
  15. ;------------------------------------------------------------------------------
  16. ; PPE 1.OO (plain) - Analysis ON - Postprocessing ON
  17. ;------------------------------------------------------------------------------
  18.  
  19.     Boolean  BOOLEAN001
  20.     Boolean  BOOLEAN002
  21.     Integer  INTEGER001
  22.     Integer  INTEGER002
  23.     Integer  INTEGER003
  24.     Integer  INTEGER004
  25.     Integer  INTEGER005
  26.     Integer  INTEGER006
  27.     Integer  INTEGER007
  28.     Integer  INTEGER008
  29.     Integer  INTEGER009
  30.     Integer  INTEGER010
  31.     Integer  INTEGER011
  32.     Integer  INTEGER012
  33.     Integer  INTEGER013
  34.     String   STRING002
  35.     String   STRING003
  36.     String   STRING004
  37.     String   TSTRING005(10)
  38.     String   TSTRING006(4)
  39.  
  40. ;------------------------------------------------------------------------------
  41.  
  42.     BOOLEAN002 = 1
  43.     INTEGER011 = 4
  44.     INTEGER001 = 60
  45.     INTEGER002 = 45
  46.     INTEGER003 = 30
  47.     INTEGER009 = 5
  48.     STRING004 = TokenStr()
  49.     BOOLEAN001 = 0
  50.     Tokenize STRING004
  51.     If (TokCount() > 2) Then
  52.         PrintLn "@X0EToo many command line arguments.  Reenter.@X07"
  53.         PrintLn "@X0EBANK @X07or @X0EBANK SHOW @X07or @X0EBANK WITHDRAW nn @X07or @X0EBANK DEPOSIT nn@X07"
  54.     Else
  55.         STRING003 = 1
  56.         GetToken TSTRING006(STRING003)
  57.         While (TSTRING006(STRING003) <> "") Do
  58.             STRING003 = STRING003 + 1
  59.             GetToken TSTRING006(STRING003)
  60.         EndWhile
  61.         If (GetEnv("PBANK")) Then
  62.             Tokenize GetEnv("PBANK")
  63.             GetToken INTEGER001
  64.             GetToken INTEGER002
  65.             GetToken INTEGER003
  66.             GetToken INTEGER009
  67.             GetToken INTEGER011
  68.             GetToken BOOLEAN002
  69.         Endif
  70.         If (Psa(6)) Goto LABEL001
  71.         PrintLn "@X0CNotes PSA must be installed in PCBSM@X07."
  72.         PrintLn "@X0CPlease Notify SYSOP.@X07"
  73.         Goto LABEL010
  74.         :LABEL001
  75.         INTEGER012 = Len(INTEGER003)
  76.         INTEGER013 = Len(INTEGER002)
  77.         GetUser
  78.         If (U_Notes(INTEGER011) == "") Then
  79.             INTEGER008 = 0
  80.             Goto LABEL002
  81.         Else
  82.             INTEGER007 = 0
  83.             Tokenize U_Notes(INTEGER011)
  84.             INTEGER008 = TokCount()
  85.             If (INTEGER008 > 10) Then
  86.                 PrintLn "@X0CInsufficient Bank storage space.  Notify Sysop.@X07"
  87.                 Goto LABEL010
  88.             Endif
  89.             For STRING003 = 1 To INTEGER008
  90.                 GetToken TSTRING005(STRING003)
  91.                 If (TSTRING005(STRING003) == "BANK") INTEGER007 = STRING003
  92.             Next
  93.             If (INTEGER007 > 0) Goto LABEL004
  94.         Endif
  95.         :LABEL002
  96.         If (INTEGER008 > 7) Then
  97.             PrintLn "@X0CInsufficient Bank storage space.  Notify Sysop.@X07"
  98.         Else
  99.             If (InStr(U_Notes(INTEGER011), "               ")) Goto LABEL003
  100.             PrintLn "@X0CInsufficient String storage space.  Notify Sysop.@X07"
  101.             Goto LABEL010
  102.             :LABEL003
  103.             INTEGER007 = INTEGER008 + 1
  104.             INTEGER008 = INTEGER008 + 3
  105.             TSTRING005(INTEGER007) = "BANK"
  106.             TSTRING005(INTEGER007 + 1) = "TIME"
  107.             TSTRING005(INTEGER007 + 2) = 0
  108.             :LABEL004
  109.             Select Case (Left(TSTRING006(1), 1))
  110.                 Case "S"
  111.                     PrintLn "@POS:10@@X0B", TSTRING005(INTEGER007), " ", TSTRING005(INTEGER007 + 1), ":  @X0E", TSTRING005(INTEGER007 + 2), " @X07min."
  112.                     Goto LABEL010
  113.                 Case "D"
  114.                     Goto LABEL008
  115.                 Case "W"
  116.                     Goto LABEL009
  117.             End Select
  118.             :LABEL005
  119.             If (GrafMode() == "N") Then
  120.                 PrintLn "You are unable to use the Time Bank interractively in your current node."
  121.                 PrintLn "Either change your mode to GRAPHICS or ANSI or enter from the command line."
  122.                 PrintLn "Syntex is:   BANK SHOW        to display time in bank."
  123.                 PrintLn "             BANK DEPOSIT nn  to deposit time in bank."
  124.                 PrintLn "             BANK WITHDRAW nn to withdraw time from bank."
  125.             Else
  126.                 BOOLEAN001 = 1
  127.                 PrintLn "@CLS@@X07"
  128.                 PrintLn "@X07"
  129.                 PrintLn "@X07"
  130.                 PrintLn "@X07  @X77                @X7F┌────────────────────────────────────────────@X7F┐@POS:79@@X07"
  131.                 PrintLn "@X0F @X08█@X78                @X70│   @X7A@BOARDNAME@ Time Bank @POS:64@@X7F│@POS:79@@X07"
  132.                 PrintLn "@X0F @X08█@X78                @X70└────────────────────────────────────────────@X7F┘@POS:79@@X07"
  133.                 PrintLn "@X0F @X08█@X78     @X7F┌─────────────────────┐   ┌─────────────────────────────────────@X7F┐   @X07"
  134.                 PrintLn "@X0F @X08█@X78     @X70│  @X7BD@X78)@X71eposit time      @X7F│   @X70│ @X7BIn your Account@X78: @X7E    @X78               @X7F│   @X07"
  135.                 PrintLn "@X0F @X08█@X78     @X70│  @X7BW@X78)@X71ithdraw time     @X7F│   @X7F@X70│ @X79Maximum Bank Balance@X78: @X7E    @X78          @X7F│   @X07"
  136.                 PrintLn "@X0F @X08█@X78     @X70│  @X7BH@X78)@X71elp!             @X7F│   @X70│                                     @X7F│   @X07"
  137.                 PrintLn "@X0F @X08█@X78     @X70│                     @X7F│   @X70│ @X7EAvailable for Withdrawal@X78: @X7E    @X78      @X7F│   @X07"
  138.                 PrintLn "@X0F @X08█@X78     @X70│  @X7BQ@X78)@X74uit to @X74BBS       @X7F│   @X70│ @X7EAvailable for Deposit   @X78: @X7E    @X78      @X7F│   @X07"
  139.                 PrintLn "@X0F @X08█@X78     @X70│  @X7BG@X78)@X74oodbye           @X7F│   @X70│ @X79Maximum Withdrawal P/Day@X78: @X7E    @X78      @X7F│   @X07"
  140.                 PrintLn "@X0F @X08█@X78     @X70└─────────────────────@X7F┘   @X70└─────────────────────────────────────@X7F┘   @X07"
  141.                 PrintLn "@X0F @X08█@X78                                                                         @X07"
  142.                 PrintLn "@X08 █@X78                                                                         @X07"
  143.                 PrintLn "@X08 █@X78                                                                         @X07"
  144.                 PrintLn "@X08 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀@X07"
  145.                 :LABEL006
  146.                 INTEGER005 = INTEGER003
  147.                 INTEGER004 = TSTRING005(INTEGER007 + 2)
  148.                 :LABEL007
  149.                 STRING002 = ""
  150.                 If (INTEGER004 > INTEGER002) INTEGER004 = INTEGER002
  151.                 If (INTEGER005 > INTEGER001 - TSTRING005(INTEGER007 + 2)) INTEGER005 = INTEGER001 - TSTRING005(INTEGER007 + 2)
  152.                 If (INTEGER005 > MinLeft() - INTEGER009) INTEGER005 = MinLeft() - INTEGER009
  153.                 If (INTEGER005 < 0) INTEGER005 = 0
  154.                 AnsiPos 53, 8
  155.                 Print "@X75", TSTRING005(INTEGER007 + 2), " @X78Min   @X07"
  156.                 AnsiPos 58, 9
  157.                 Print "@X75", INTEGER001, " @X78Min.   @X07"
  158.                 AnsiPos 62, 11
  159.                 Print "@X75", INTEGER004, " @X78Min.   @X07"
  160.                 AnsiPos 62, 12
  161.                 Print "@X75", INTEGER005, " @X78Min.   @X07"
  162.                 AnsiPos 62, 13
  163.                 Print "@X75", INTEGER002, " @X78Min.   @X07"
  164.                 AnsiPos 0, 19
  165.                 InputStr "(@X0C@TIMELEFT@ @X0Emin. left) Command", STRING002, 14, 1, Mask_AlNum(), 2 + 4 + 8 + 128 + 256 + 32
  166.                 If (STRING002 == "D") Goto LABEL008
  167.                 If (STRING002 == "W") Goto LABEL009
  168.                 If (STRING002 == "H") Then
  169.                     If (Exist(HelpPath() + "BANK")) DispFile HelpPath() + "BANK", 4 + 2 + 1
  170.                     Goto LABEL005
  171.                 Endif
  172.                 If (STRING002 == "Q") Goto LABEL010
  173.                 If (STRING002 == "G") Goto LABEL011
  174.                 If (STRING002 == "") Goto LABEL010
  175.                 Goto LABEL006
  176.                 :LABEL008
  177.                 If (BOOLEAN001 == 1) Then
  178.                     INTEGER006 = INTEGER005
  179.                     ClrEol
  180.                     InputStr "Enter the Amount to Deposit: ", INTEGER006, 14, INTEGER012, Mask_Num(), 2 + 4 + 8 + 32
  181.                 Else
  182.                     INTEGER006 = TSTRING006(2)
  183.                     If (INTEGER006 < 0) INTEGER006 = 0
  184.                 Endif
  185.                 If (INTEGER006 + TSTRING005(INTEGER007 + 2) > INTEGER001) Then
  186.                     INTEGER010 = 1
  187.                 ElseIf (INTEGER006 > INTEGER003) Then
  188.                     INTEGER010 = 2
  189.                 ElseIf (INTEGER006 > MinLeft() - INTEGER009) Then
  190.                     INTEGER010 = 3
  191.                 Else
  192.                     TSTRING005(INTEGER007 + 2) = TSTRING005(INTEGER007 + 2) + INTEGER006
  193.                     U_Notes(INTEGER011) = TSTRING005(1)
  194.                     For STRING003 = 2 To INTEGER008
  195.                         U_Notes(INTEGER011) = U_Notes(INTEGER011) + " " + TSTRING005(STRING003)
  196.                     Next
  197.                     PutUser
  198.                     AdjTime -INTEGER006
  199.                     INTEGER005 = INTEGER005 - INTEGER006
  200.                     If (INTEGER005 < 0) Then
  201.                         INTEGER005 = 0
  202.                     Endif
  203.                     INTEGER010 = 0
  204.                 Endif
  205.                 Select Case (INTEGER010)
  206.                     Case 0
  207.                         PrintLn "@X0CDepositing @X0E", INTEGER006, "@X0E Min@X0C to Your Account         @X07"
  208.                         Log "Time Bank Deposit: " + String(INTEGER006) + " Min.", 0
  209.                     Case 1
  210.                         PrintLn "@X0CThe maximum allowed bank time is @X0B", INTEGER001, " min.             @X07@BEEP@"
  211.                         If (BOOLEAN002 == 1) Log "Attempted to Deposit More than Maximum Bank Time", 0
  212.                     Case 2
  213.                         PrintLn "@X0CThe Maximum daily Deposit is: @X0B", INTEGER003, " Min.         @X07@BEEP@"
  214.                         If (BOOLEAN002 == 1) Log "Attempted to Exceed Max daily Deposit", 0
  215.                     Case 3
  216.                         PrintLn "@X0CYou must maintain @X0B", INTEGER009, " Min. for logoff.           @X07@BEEP@"
  217.                         If (BOOLEAN002 == 1) Log "Attempted to store logoff allotment", 0
  218.                 End Select
  219.                 If (BOOLEAN001 == 1) Goto LABEL007
  220.                 Goto LABEL010
  221.                 :LABEL009
  222.                 If (BOOLEAN001 == 1) Then
  223.                     ClrEol
  224.                     InputStr "Enter the Amount to Withdraw:", INTEGER006, 14, INTEGER013, Mask_Num(), 2 + 4 + 8 + 32
  225.                 Else
  226.                     INTEGER006 = TSTRING006(2)
  227.                     If (INTEGER006 < 0) INTEGER006 = 0
  228.                 Endif
  229.                 If (TSTRING005(INTEGER007 + 2) == 0) Then
  230.                     INTEGER010 = 1
  231.                 ElseIf (INTEGER006 > TSTRING005(INTEGER007 + 2)) Then
  232.                     INTEGER010 = 2
  233.                 ElseIf (INTEGER006 > INTEGER002) Then
  234.                     INTEGER010 = 3
  235.                 Else
  236.                     TSTRING005(INTEGER007 + 2) = TSTRING005(INTEGER007 + 2) - INTEGER006
  237.                     U_Notes(INTEGER011) = TSTRING005(1)
  238.                     For STRING003 = 2 To INTEGER008
  239.                         U_Notes(INTEGER011) = U_Notes(INTEGER011) + " " + TSTRING005(STRING003)
  240.                     Next
  241.                     If (INTEGER006 < 0) INTEGER006 = 0
  242.                     PutUser
  243.                     AdjTime INTEGER006
  244.                     INTEGER004 = INTEGER004 - INTEGER006
  245.                     If (INTEGER004 < 0) Then
  246.                         INTEGER004 = 0
  247.                     Endif
  248.                     INTEGER010 = 0
  249.                 Endif
  250.                 Select Case (INTEGER010)
  251.                     Case 0
  252.                         PrintLn "@X0CWithdrawing @X0E ", INTEGER006, " Min@X0C from Your Account         @X07"
  253.                         Log "Time Bank Withdrawal: " + String(INTEGER006) + " Min.", 0
  254.                     Case 1
  255.                         PrintLn "@X0CYou Must deposit time in the Bank in order to Withdraw         @X07@BEEP@"
  256.                         If (BOOLEAN002 == 1) Log "Attempted to Withdraw : No Time in the Bank!", 0
  257.                     Case 2
  258.                         PrintLn "@X0CYou cannot withdraw more than you have.                        @X07@BEEP@"
  259.                         If (BOOLEAN002 == 1) Log "Attempted to withdraw more than in bank.", 0
  260.                     Case 3
  261.                         PrintLn "@X0CMaximum daily withdrawal is @X0B", INTEGER002, " min.              @X07@BEEP@"
  262.                         If (BOOLEAN002 == 1) Log "Attempted to excede max daily withdrawal.", 0
  263.                 End Select
  264.                 If (BOOLEAN001 == 1) Goto LABEL007
  265.             Endif
  266.         Endif
  267.     Endif
  268.     :LABEL010
  269.     End
  270.     :LABEL011
  271.     Goodbye
  272.  
  273. ;------------------------------------------------------------------------------
  274. ;
  275. ; Usage report (before postprocessing)
  276. ;
  277. ; ■ Statements used :
  278. ;
  279. ;    1       End
  280. ;    2       ClrEol
  281. ;    76      Goto 
  282. ;    59      Let 
  283. ;    5       Print 
  284. ;    39      PrintLn 
  285. ;    57      If 
  286. ;    1       DispFile 
  287. ;    1       GetUser
  288. ;    2       PutUser
  289. ;    2       AdjTime 
  290. ;    8       Log 
  291. ;    3       InputStr 
  292. ;    3       Tokenize 
  293. ;    9       GetToken 
  294. ;    1       Goodbye
  295. ;    6       AnsiPos 
  296. ;
  297. ;
  298. ; ■ Functions used :
  299. ;
  300. ;    1       -
  301. ;    46      +
  302. ;    8       -
  303. ;    31      ==
  304. ;    1       <>
  305. ;    9       <
  306. ;    3       <=
  307. ;    12      >
  308. ;    6       >=
  309. ;    34      !
  310. ;    6       &&
  311. ;    3       ||
  312. ;    2       Len(
  313. ;    3       Left()
  314. ;    1       InStr()
  315. ;    2       String()
  316. ;    2       Mask_Num()
  317. ;    1       Mask_AlNum()
  318. ;    3       MinLeft()
  319. ;    2       GetEnv()
  320. ;    1       Exist()
  321. ;    1       TokenStr()
  322. ;    1       GrafMode()
  323. ;    1       Psa()
  324. ;    2       HelpPath()
  325. ;    2       TokCount()
  326. ;
  327. ;------------------------------------------------------------------------------
  328. ;
  329. ; Analysis flags : WA
  330. ;
  331. ; W - Write user ■ 5
  332. ;     Program writes a user record. Although this may be normal for a
  333. ;     User Editor, it may also be a way to modify an account level.
  334. ;     ■ Search for : PUTUSER
  335. ;
  336. ; A - Adjust online time remaining ■ 5
  337. ;     Program modify the amount of online time remaining, this may
  338. ;     be a way to bypass time limits
  339. ;     ■ Search for : ADJTIME
  340. ;
  341. ;------------------------------------------------------------------------------
  342. ;
  343. ; Postprocessing report
  344. ;
  345. ;    3       For/Next
  346. ;    1       While/EndWhile
  347. ;    17      If/Then or If/Then/Else
  348. ;    3       Select Case
  349. ;
  350. ;------------------------------------------------------------------------------
  351. ;                 AEGiS Corp - Break the routines, code against the machines!
  352. ;------------------------------------------------------------------------------
  353.